Crafty Core
事件
- NewEntityName [entity name = {String}]
- 实体设置新名字后
- NewComponent [Component = {String}]
- 实体增加新组件时
- RemoveComponent [Component = {String}]
- 实体移除组件时
- Remove
- 调用 .destroy() 移除组件时
每个单独实体增加的一组方法
方法
- .addComponent()
- .attr()
- .bind()
- .clone()
- .defineField()
- .destroy()
- .each()
- .get()
- .getId()
- .getName()
- .has()
- .one()
- .removeComponent()
- .requires()
- .setName()
- .setter()
- .timeout()
- .toArray()
- .toggleComponent()
- .trigger()
- .unbind()
- .uniqueBind()
.addComponent()
public this .addComponent(String componentList)
- componentList
以逗号
,
隔开的组件字符串
public this .addComponent(String Component1[, .., String ComponentN])
- Component#
新增组件的 ID。
为选中实体增加一个组件。
组件用来拓展实体功能。它会复制属性、分配方法来增强实体功能。
你可以通过传递包含所有组件名的字符串(以逗号隔开),或者传递各个组件名作为参数来增加多个组件。
如果组件有 init
方法,方法会被调用
如果实体已经有了该组件,该组件会被忽略(无事发生)。
示例
this.addComponent("2D, Canvas");
this.addComponent("2D", "Canvas");
.attr()
事件
- Change [Data = {key: value}]
- 属性改变时
public this .attr(String property, Any value[, Boolean silent[, Boolean recursive]])
- property
实体需要修改的属性
- value
给属性赋的值
- silent
如果你想要抑制事件
- recursive
如果你想要递归地合并
使用该方法给实体设置任意属性。
public this .attr(Object map[, Boolean silent[, Boolean recursive]])
- map
该对象的键:要修改的属性,值:属性值
- silent
如果你想要抑制事件
- recursive
如果你想要递归地合并
使用该方法给实体设置多个属性。
设置选项:
silent
:如果你想阻止它启动事件。recursive
:如果你传入的对象会覆盖兄弟键,它会递归地合并,而不是简单合并。 默认是false
,除非你使用点号name.first
。
public Any .attr(String property)
- property
实体需要修改的属性
- [Returns]
值 - 属性的值
使用该方法获得实体任意属性。你也可以使用 this.property
取得属性值。
示例
this.attr({key: "value", prop: 5});
this.attr("key"); // 返回 "value"
this.attr("prop"); // 返回 5
this.key; // "value"
this.prop; // 5
this.attr("key", "newvalue");
this.attr("key"); // 返回 "newvalue"
this.key; // "newvalue"
this.attr("parent.child", "newvalue");
this.parent; // {child: "newvalue"};
this.attr('parent.child'); // "newvalue"
.bind()
public this .bind(String eventName, Function callback)
- eventName
要绑定的事件名
- callback
事件触发后要执行的方法
附加当前实体来监听事件。
传递的事件触发后会调用回调函数。根据事件的不同,一些数据可以通过参数传递给回调函数。
第一个参数是事件名(可能是任意值),同时第二个参数是一个回调函数。如果事件有数据,回调函数应该有一个参数。
事件是任意的,并提供组件之间的通信。即使它不存在,也可以触发或绑定事件。
与 DOM 事件不同,Crafty 事件是同步执行的。
示例
this.attr("triggers", 0); //设置一个触发器计数
this.bind("myevent", function() {
this.triggers++; //每当触发 myevent 时,递增
});
this.bind("EnterFrame", function() {
this.trigger("myevent"); // 每帧触发 myevent
});
.defineField()
public this .defineField(String property, Function getCallback, Function setCallback)
- property
要分配 getter 和 setter 的属性名
- getCallback
属性被访问执行的方法
- setCallback
属性被改变执行的方法
分配 getter 和 setter 给属性。getter 将监视等待访问的属性,然后在尝试检索时调用给定的取值回调函数。setter 将监视等待改变的属性,然后在尝试修改时调用给定的赋值回调函数。
示例
var ent = Crafty.e("2D");
ent.defineField("customData", function() {
return this._customData;
}, function(newValue) {
this._customData = newValue;
});
ent.customData = "2" // 设置 customData 为 2
Crafty.log(ent.customData) // 打印 2
.each()
public this .each(Function method)
- method
-
每次迭代调用的方法
迭代发现的实体,为每个实体调用函数。
为每个实体调用这个方法,并且把迭代的索引作为参数传递。方法的上下文(this
的值)是迭代中的当前实体。
示例
销毁次序为偶数的 2D 实体
Crafty("2D").each(function(i) {
if(i % 2 === 0) {
this.destroy();
}
});
.get()
public Array .get()
- [Returns]
与活动选择器相对应的一组实体
public Entity .get(Number index)
- [Returns]
属于当前选择的实体
- index
将要返回的实体的索引。如果为负,从数组末尾计数。
示例
获取包含所有“2D”实体的数组
var arr = Crafty("2D").get()
获取第一个匹配选择器的实体
// 等同于 Crafty("2D").get()[0],但是不能创建新数组
var e = Crafty("2D").get(0)
获取匹配选择器的最后一个“2D”实体
var e = Crafty("2D").get(-1)
.getId()
public Number .getId(void)
- [Returns]
实体 ID
为了更好的性能,简单地使用 this[0] 属性。
示例
返回属性 0
可以找出实体 ID
。
var ent = Crafty.e("2D");
ent[0]; //ID
ent.getId(); //也是 ID
.getName()
public this .getName(String name)
- [Returns]
用于调试目的的对人友好的名称。
获取用于调试目的的易读名称。
示例
var ent = Crafty.e().setName("Player");
var name = ent.getName();
另请参阅
.has()
public Boolean .has(String component)
- component
要检查的组件的名称
- [Returns]
true
或false
取决于实体是否有给定组件。
为了更好的性能,简单地使用 .__c
对象,如果实体有给定组件,该对象为 true
,否则,该对象不存在(或者是 false
)。
.one()
public Number one(String eventName, Function callback)
- eventName
要绑定的事件名称
- callback
事件出发时执行的函数
- [Returns]
用来解绑的当前回调函数的 ID
作用类似 Crafty.bind,但是事件触发后就会解绑。
另请参阅
.removeComponent()
public this .removeComponent(String Component[, soft])
- component
要移除的组件
- soft
是否软移除(默认
true
)
从实体移除一个组件。软移除(默认)只能避免 .has()
返回 true。硬移除会移除所有关联属性和方法。
示例
var e = Crafty.e("2D,DOM,Test");
e.removeComponent("Test"); //软移除 Test 组件
e.removeComponent("Test", false); //硬移除 Test 组件
.requires()
public this .requires(String componentList)
- componentList
必须添加的组件列表
确保实体有列出的组件。如果没有,新增组件。
(当天 Crafty 版本中,该方法的行为与 addComponent
完全相同。根据惯例,开发者使用 requires
进行组件依赖 —— 例如:具体地指出,只有当另一个组件存在时,一个组件才能正常工作 —— 在其他所有情况下使用 requires
。)
另请参阅
.setName()
public this .setName(String name)
- name
出于调试目的的对人友好的容易理解的名字。
设置出于调试目的的对人友好的容易理解的名字。
示例
var ent = Crafty.e().setName("Player");
另请参阅
.setter()
public this .setter(String property, Function callback)
- property
被监视是否被修改的属性
- callback
属性被修改后的回调函数
将监视等待修改的属性,然后在尝试修改时调用给定的回调函数。
不建议使用这个功能;使用 .defineField()
另请参阅
.timeout()
public this .timeout(Function callback, Number delay)
- callback
在给定毫秒数后执行的函数
- delay
延迟执行函数的毫秒数
延迟方法将在给定的毫秒数后执行一个函数。
本质上是 setTimeout
的包装器。
示例
100 毫秒后销毁自身
this.timeout(function() {
this.destroy();
}, 100);
.toggleComponent()
public this .toggleComponent(String ComponentList)
- ComponentList
以逗号
,
隔开的将要添加或删除的组件字符串
public this .toggleComponent(String Component1[, .., String componentN])
- Component#
将要添加或删除的组件 ID。
Add or Remove Components from an entity.
示例
var e = Crafty.e("2D,DOM,Test");
e.toggleComponent("Test,Test2"); //Remove Test, add Test2
e.toggleComponent("Test,Test2"); //Add Test, remove Test2
var e = Crafty.e("2D,DOM,Test");
e.toggleComponent("Test","Test2"); //Remove Test, add Test2
e.toggleComponent("Test","Test2"); //Add Test, remove Test2
e.toggleComponent("Test"); //Remove Test
.trigger()
public this .trigger(String eventName[, Object data])
- eventName
要触发的事件
- data
将被作为参数传入每个回调函数的任意数据
触发携带任意数据的事件。将会调用所有带有当前实体对象的上下文(this
的值)的回调函数。
注意:这只会在当前实体内执行回调函数,没有其他实体。
第一个参数是要出发的事件的名字,可选参数是任意事件数据。这可以是任何东西。
与 DOM 事件不同,Crafty 事件是同步执行的。
.unbind()
public this .unbind(String eventName[, Function callback])
- eventName
要解绑的事件的名称
- callback
要解绑的回调函数
从当前实体移除绑定的事件。
传递一个事件名称,将移除所有与该事件绑定的事件。传递回调函数的引用只会解绑该回调函数。